home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Monster Media 1996 #15
/
Monster Media Number 15 (Monster Media)(July 1996).ISO
/
tbbs
/
prgsourc.zip
/
FLAGS.ZIP
/
FLAG.PRG
< prev
next >
Wrap
Text File
|
1996-03-06
|
33KB
|
1,304 lines
* abcdefgijhkmnopqrstuvwxyz - l
**************************************************
* GLOBAL
**************************************************
*
* a = SELECT VFlags
* e = SELECT Flags
* ***
* flags = .DBF name
* vflags = .DBF name
* user = .NDX name
* pik = .NDX name
* usr = field from flags, user name (30 char)
* flg = field from flags, flag string (70 char)
* vis = field from flags, vis/invis .T./.F. (logical)
* reg = field from flags, reg/not .T./.F. (logical)
* age = field from flags, of age/not .T./.F. (logical)
* ysn = field from flags, yes/no .T./.F. (logical)
* pfile = field from Vflags, file/identifier (8 char)
* flen = field from Vflags, length of flag (1 num)
* fpos = field from Vflags, position of flag (2 num)
* plen = field from Vflags, lines in pick list (5 num)
* pwidth = field from Vflags, length of pick list lines (2 num)
* fscr = .FMT file
* ***
* b = background color
* h = highlite color
* n = normal color
* ***
* c = command
* f = flg string holder
* f# = f1-f?, file name holder
* y1 = top
* x1 = left
* y2 = bottom
* x2 = right
* t = file handle for .TIL file
* p = file handle for pick list file
* k = InKey result
* line = last read line, any file
* o = .T./.F. temporary in MAIN
* x = return from Gyx, extra temporary counter
* y = return from Gyx, extra temporary local
* z = code returned from file operations
*
**************************************************
* TEMPORARY LOCAL - d,g,i,j,m,q,r,s,u,v,w
**************************************************
* PROCEDURES
**************************************************
*
* Clr = Clear area
* Dat = Get Date
* Er = Error routine for ON ERROR
* Err = Error routine for user errors
* Gc = Get color
* Gyx = read y,x1 from file
* Pic = Pick list
* Vew = View profiles(s)
* Yn = Yes/no
*
**************************************************
SET FORMAT TO fscr NOCLEAR
SET INTENSITY OFF
SET ESCAPE OFF
ON ERROR DO Er
o = .F.
STORE Space(1) TO b,d,f,g,h,k,m,n,q,r,s,u,w
STORE 0 TO y1,x1,y2,x2,i,j,v,x,y,bd
USE ail INDEX ails
f1 = LTrim(SubStr(OptData(), At(Chr(38)+Chr(38), OptData())+2))
SEEK f1
IF blocked
TYPE blocked.txt
k = InKey(60)
QUIT
ELSE
CLOSE DATABASES
f1 = Homepath() + RTrim(f1) + ".AIL"
ENDIF
SELECT a
USE vflags INDEX pik
SELECT e
USE flags INDEX user
SEEK UName()
IF .NOT. Found()
APPEND BLANK
REPLACE usr WITH UName()
f = Replicate(Chr(46),96)
REPLACE flg WITH f
ENDIF
m = fMaxLen() && m= max buffer size
IF m > 4096
v = 1024
ELSE
IF m > 1024 && max buffer size =m
v = 512
ENDIF
ENDIF
FOPEN t (f1) 10 v
DO WHILE .T.
SET COLOR TO W+/N
SELECT e
FLREAD t z line
line = RTrim(CRTrim(line))
IF Len(line) = 0
LOOP
ENDIF
IF ":" $ line
m = At(":",line) && m= Position of ":"
c = SubStr(line,1,m-1)
ELSE
LOOP
ENDIF
IF Upper(c) = "A"
line = SubStr(line,m+1)
m = At("=",line)
f = SubStr(line,1,m-1)
q = Upper(SubStr(line,m+1))
g = Val(SubStr(f,1,1)) && g= Auth string#
s = Val(SubStr(f,2))
m = UAuth(g)
m = Stuff(m,s,1,q)
d = UlReplace(Uauth,g,m) && Auth string# =g
LOOP
ENDIF
IF Upper(c) = "IF"
line = SubStr(line,m+1)
DO CASE
CASE "+" $ line
DO Gfld WITH 1,o
CASE "-" $ line
DO Gfld WITH 2,o
CASE "=" $ line
m = At("=",line)
SELECT a
SEEK SubStr(line,1,m-1)
SELECT e
IF SubStr(flg,a->fpos,a->flen) = SubStr(line,m+1)
o = .T.
ELSE
o = .F.
ENDIF
CASE "<" $ line
m = At("<",line)
SELECT a
SEEK SubStr(line,1,m-1)
SELECT e
q = SubStr(flg,a->fpos,1) && q= user's flag value
s = SubStr(line,m+1,1) && s= flag value read
o = .T.
DO WHILE .T.
IF a->flen = 1
IF Asc(q) <= Asc(s)
o = .F.
EXIT
ENDIF
ELSE
IF Asc(q) < Asc(s)
o = .F.
EXIT
ELSE
IF Asc(q) > Asc(s)
EXIT
ENDIF
ENDIF
q = SubStr(flg,a->fpos+1,1) && q= user's flag value
s = SubStr(line,m+2,1) && s= flag value read
IF Asc(q) <= Asc(s)
o = .F.
EXIT
ENDIF
ENDIF
ENDDO
CASE ">" $ line
m = At(">",line)
SELECT a
SEEK SubStr(line,1,m-1)
SELECT e
q = SubStr(flg,a->fpos,1) && q= user's flag value
s = SubStr(line,m+1,1) && s= flag value read
o = .T.
DO WHILE .T.
IF a->flen = 1
IF Asc(q) >= Asc(s)
o = .F.
EXIT
ENDIF
ELSE
IF Asc(q) > Asc(s)
o = .F.
EXIT
ELSE
IF Asc(q) < Asc(s)
EXIT
ENDIF
ENDIF
q = SubStr(flg,a->fpos+1,1) && q= user's flag value
s = SubStr(line,m+2,1) && s= flag value read
IF Asc(q) >= Asc(s)
o = .F.
EXIT
ENDIF
ENDIF
ENDDO
ENDCASE
IF .NOT. o
FLFIND t z "ELSE:" 1
ENDIF
LOOP
ENDIF
IF Upper(c) = "ELSE"
IF o
FLFIND t z "ENDIF:" 1
ENDIF
LOOP
ENDIF
IF Upper(c) = "IFDATE"
line = SubStr(line,m+1)
DO CASE
CASE "<" $ line
s = 1
m = At("<",line)
CASE ">" $ line
s = 2
m = At(">",line)
CASE "=" $ line
s = 2
m = At("=",line)
ENDCASE
d = SubStr(line,1,m-1)
q = SubStr(line,1,m+1)
SELECT a
SEEK d
SELECT e
w = SubStr(flg,a->fpos+2,1)
w = 254 - Asc(w)
IF w < 10
w = "0" + Str(w)
ELSE
w = Str(w)
ENDIF
d = SubStr(flg,a->fpos+1,1)
d = 254 - Asc(d)
IF d < 10
d = "0" + Str(d)
ELSE
d = Str(d)
ENDIF
i = SubStr(flg,a->fpos,1)
i = 254 - Asc(d)
i = 254 - Asc(i)
IF i < 10
i = "0" + Str(i)
ELSE
i = Str(i)
ENDIF
i = Str(i)
d = d + "/" + i + "/" + w
d = CtoD(d)
q = CtoD(d)
o = .F.
DO CASE
CASE s = 1
IF d < q
o = .T.
ENDIF
CASE s = 2
IF d > q
o = .T.
ENDIF
CASE s = 3
IF d = q
o = .T.
ENDIF
ENDCASE
IF .NOT. o
FLFIND t z "ELSE:" 1
ENDIF
LOOP
ENDIF
IF Upper(c) = "ENDIF"
o = .F.
LOOP
ENDIF
IF Upper(c) = "SHOW"
line = SubStr(line,m+1)
q = At("=",line) && q=
f1 = Homepath() + "TEXT\" + SubStr(line,1,q-1) + ".TXT"
s = Val(SubStr(line,q+1))
IF s > 255
s = 255
ENDIF
TYPE (f1)
IF s = 0
LOOP
ELSE
k = InKey(s)
ENDIF
LOOP
ENDIF
IF Upper(c) = "FLAG"
line = SubStr(line,m+1)
q = At("=",line) && q=
s = Val(SubStr(line,1,q-1)) && s=
d = SubStr(line,1,q+1) && d=,=q
f = flg
f = Stuff(f,s,Len(d),d) && =d,=s
REPLACE flg WITH f
LOOP
ENDIF
IF (c) = "+"
line = SubStr(line,m+1)
DO Cfld WITH 1
LOOP
ENDIF
IF (c) = "-"
line = SubStr(line,m+1)
DO Cfld WITH 2
LOOP
ENDIF
IF Upper(c) = "VIEW"
q = SubStr(line,m+1)
DO Vew
LOOP
ENDIF
IF Upper(c) = "CLEAR"
q = SubStr(line,m)
IF Upper(q) = ":SCREEN"
SET COLOR TO N/N
@ 0,0 CLEAR
LOOP
ENDIF
DO Clr
LOOP
ENDIF
IF Upper(c) = "PICK"
f1 = SubStr(line,m+1)
DO Pic
LOOP
ENDIF
IF Upper(c) = "REM"
LOOP
ENDIF
IF Upper(c) = "YESNO"
DO Yn
LOOP
ENDIF
IF Upper(c) = "CHECK"
DO Chk
LOOP
ENDIF
IF Upper(c) = "DATE"
DO Dat
LOOP
ENDIF
IF Upper(c) = "QUIT"
QUIT
ENDIF
ENDDO
QUIT
**************************************************
PROCEDURE Dat
**************************************************
DO Gyx WITH y,x
y1 = y
x1 = x
DO Gc WITH b,n,h,bd
SELECT a
FLREAD t z line
line = RTrim(CRTrim(line))
s = At("=",line) && s=
SEEK SubStr(line,1,s-1)
q = SubStr(line,s+1) && q=,=s
y2 = y1 + 6
IF Len(q) > 12
x2 = x1 + Len(q) + 4
ELSE
x2 = 14
ENDIF
SET COLOR TO (b)
DO CASE
CASE bd = 0
@ y1+1,x1+1 CLEAR TO y2-1,x2-1
SET COLOR TO (n)
CASE bd = 1
@ y1,x1 CLEAR TO y2,x2
SET COLOR TO (n)
@ y1,x1 TO y2,x2
CASE bd = 2
@ y1,x1 CLEAR TO y2,x2
SET COLOR TO (n)
@ y1,x1 TO y2,x2 DOUBLE
ENDCASE
@ y1+2,x1+2 SAY q && =q
@ y1+4,x1+2 SAY "Date:"
d = CToD(" / / ") && d=
s = CToD("01/01/10") && s=
q = Date() - (365*12) && q=
SET COLOR TO (h)
DO WHILE .T.
@ y1+4,x1+8 GET d PICTURE "@D" RANGE s,q && =q,=s
READ
IF UpDated()
EXIT
ELSE
LOOP
ENDIF
ENDDO
SELECT e
f = flg
q = Chr(254 - Day(d)) && q=
f = Stuff(f,a->fpos,1,q) && =q
q = Chr(254 - Month(d)) && q=
f = Stuff(f,a->fpos+1,1,q) && =q
q = Chr(254 - (Year(d) - 1900)) && q=
f = Stuff(f,a->fpos+2,1,q) && =q
REPLACE flg WITH f
k= InKey(1)
RETURN
**************************************************
PROCEDURE Pic
**************************************************
SELECT a
SEEK f1
IF Found()
f1 = Homepath() + "PIKS\" + f1 + ".PIK"
ELSE
DO err WITH 2,f1
ENDIF
DO Gyx WITH y,x
y1 = y
x1 = x
DO Gc WITH b,n,h,bd
FLREAD t z line
y2 = Val(RTrim(CRTrim(line)))
x2 = x1 + pwidth + 1
q = (y2-y1)-1 && q= Visible # of rows
SET COLOR TO (b)
DO CASE
CASE bd = 0
@ y1+1,x1+1 CLEAR TO y2-1,x2-1
SET COLOR TO (n)
CASE bd = 1
@ y1,x1 CLEAR TO y2,x2
SET COLOR TO (n)
@ y1,x1 TO y2,x2
CASE bd = 2
@ y1,x1 CLEAR TO y2,x2
SET COLOR TO (n)
@ y1,x1 TO y2,x2 DOUBLE
ENDCASE
m = fMaxLen() && m= max buffer size
IF m > 4096
v = 3072
ELSE
IF m > 2048 && max buffer size =m
v = 1024
ENDIF
ENDIF
FOPEN p (f1) 10 v
s = 1 && s= row pointer
DO WHILE .T.
FLREAD p z line
line = CRTrim(line)
@ y1+s,x1+2 SAY line
IF s = plen .OR. s = q
EXIT
ENDIF
s = s + 1
ENDDO
FSEEK p z 0 0
FLREAD p z line
line = CRTrim(line)
w = 1 && w= Current line in .PIK file
g = y1 + 1 && g= Current row in list
SET COLOR TO (h)
@ g,x1+2 SAY line
SET COLOR TO N/N
k = " "
@ 0,0 GET k
DO WHILE .T.
READ
DO CASE
CASE LastKey() = 5
IF w = 1
LOOP
ENDIF
IF g > y1 + 1
SET COLOR TO (n)
@ g,x1+2 SAY line
d = -(pwidth*2) && d= Bytes to move
FSEEK p z d 1 && Bytes to move =d
FLREAD p z line
line = CRTrim(line)
w = w - 1
g = g - 1
ELSE
SET COLOR TO (n)
d = -(pwidth*2) && d= Bytes to move
FSEEK p z d 1 && Bytes to move =d
s = 1
DO WHILE .T.
FLREAD p z line
line = CRTrim(line)
@ y1+s,x1+2 SAY line
IF s = q
EXIT
ENDIF
s = s + 1
ENDDO
d = (pwidth * (0-q)) && d= Bytes to move
FSEEK p z d 1 && Bytes to move =d
FLREAD p z line
line = CRTrim(line)
w = w - 1
ENDIF
CASE LastKey() = 13
IF flen = 1
w = Chr(254-w)
ELSE
g = Ceiling(w/126) && g= Flag @ fpos 1
g = Chr(254-g)
z = Int(w/126)
w = w - (126 * z)
w = Chr(254 - w)
w = g + w && Flag @ fpos 1 =g
ENDIF
SELECT e
f = flg
SET COLOR TO W+/N
f = Stuff(f,a->fpos,a->flen,w)
REPLACE flg WITH f
FCLOSE p
RETURN
CASE LastKey() = 24
SET COLOR TO W+/N
IF w = plen
LOOP
ENDIF
IF g < q + y1
SET COLOR TO (n)
@ g,x1+2 SAY line
FLREAD p z line
line = CRTrim(line)
w = w + 1
g = g + 1 && Current row in list =g
ELSE
SET COLOR TO (n)
d = (pwidth * (1-q)) && d= Bytes to move
FSEEK p z d 1 && Bytes to move =d
s = 1
DO WHILE .T.
FLREAD p z line
line = CRTrim(line)
@ y1+s,x1+2 SAY line
IF s = q && Visible # of rows =q
EXIT
ENDIF
s = s + 1 && row pointer =s
ENDDO
w = w + 1 && Current line in .PIK file =w
ENDIF
ENDCASE
SET COLOR TO (h)
@ g,x1+2 SAY line
ENDDO
RETURN
**************************************************
PROCEDURE Clr
**************************************************
DO Gyx WITH y,x
y1 = y
x1 = x
DO Gyx WITH y,x
y2 = y
x2 = x
FLREAD t z line
line = RTrim(CRTrim(line))
s = At(",",line) && s= At ","
n = SubStr(line,1,s-1)
b = SubStr(n,Len(n),1)
b = b + "/" + b
bd = Val(SubStr(line,s+1)) && At "," =s
SET COLOR TO (b)
@ y1,x1 CLEAR TO y2,x2
SET COLOR TO (n)
DO CASE
CASE bd = 1
@ y1,x1 TO y2,x2
CASE bd = 2
@ y1,x1 TO y2,x2 DOUBLE
ENDCASE
RETURN
**************************************************
PROCEDURE Yn q has value throughout
**************************************************
DO Gyx WITH y,x
y1 = y
x1 = x
x2 = 79 - x1
DO Gc WITH b,n,h,bd
FLREAD t z line
line = RTrim(CRTrim(line))
d = At("/",line) && d=
y = " " + SubStr(line,1,d-1) + " " && y= "Yes" string
w = " " + SubStr(line,d+1) + " " && =d,w= "No" string
d = x1 + 2 && d=
s = x2 - (2 + Len(w)) && s=
SET COLOR TO (h)
@ y1,d SAY y
SET COLOR TO (n)
@ y1,s SAY w
x = 1
SET COLOR TO N/N
k = " "
@ 0,0 GET k
DO WHILE .T.
READ
DO CASE
CASE LastKey() = 4
IF x = 2
LOOP
ELSE
SET COLOR TO (n)
@ y1,d SAY y
SET COLOR TO (h)
@ y1,s SAY w
x = 2
ENDIF
CASE LastKey() = 19
IF x = 1
LOOP
ELSE
SET COLOR TO (n)
@ y1,s SAY w && =s, "No" string =w
SET COLOR TO (h)
@ y1,d SAY y && =d
x = 1
ENDIF
CASE LastKey() = 13
SELECT e
IF x = 1
REPLACE ysn WITH .T.
ELSE
REPLACE ysn WITH .F.
ENDIF
RETURN
ENDCASE
ENDDO
RETURN
**************************************************
PROCEDURE Gc
**************************************************
PARAMETERS b,n,h,bd
FLREAD t z line
line = RTrim(CRTrim(line))
s = At(",",line) && s= At ","
n = SubStr(line,1,s-1)
b = SubStr(n,Len(n),1)
b = b + "/" + b
line = SubStr(line,s+1) && At "," =s
s = At(",",line)
h = SubStr(line,1,s-1)
bd = Val(SubStr(line,s+1))
RETURN
**************************************************
PROCEDURE Gyx
**************************************************
PARAMETERS y,x
FLREAD t z line
line = RTrim(CRTrim(line))
s = At(",",line) && s= At ","
y = Val(SubStr(line,1,s-1))
line = SubStr(line,s+1)
s = At(",",line)
x = Val(SubStr(line,1,s-1)) && At "," =s
RETURN
**************************************************
PROCEDURE Vew q has value throughout
**************************************************
DO Gc WITH b,n,h,bd
SELECT a
g = 0 && g= bytes to move back
x = 0
DO WHILE .T.
FLREAD t z line
line = RTrim(CRTrim(line))
g = g - z
IF Len(line) < 3 .OR. .NOT. "=" $ line .OR. ":" $ line
EXIT
ENDIF
x = x + 1
ENDDO
y = x && y= number of items to view
FSEEK t z g 1 && bytes to move back =g
DECLARE pf[x]
DECLARE tit[x]
s = 0 && s= Max length of pwidth
g = 0 && g= Max length of title
x = 1
DO WHILE x <= y
FLREAD t z line
line = RTrim(CRTrim(line))
w = At("=",line) && w= position of "="
pf[x] = SubStr(line,1,w-1)
tit[x] = SubStr(line,w+1) && position of "=" =w
SEEK pf[x]
IF .NOT. Found()
DO err WITH 5,x
ENDIF
IF pwidth > s
s = pwidth
ENDIF
IF Len(tit[x]) > g
g = Len(tit[x])
ENDIF
x1 = s + g && Max length of pwidth =s
IF x1 > 74
DO err WITH 6,x
ENDIF
x = x + 1
ENDDO
DO CASE
CASE y <= 12
x2 = Max(x1,44) + 6
y1 = Ceiling((23 - (y + 8))/2)
y2 = y1 + 7 + y
x1 = Ceiling((79 - x2)/2)
x2 = x1 + x2
SET COLOR TO (b)
@ y1,x1 CLEAR TO y2,x2
SET COLOR TO (n)
@ y1,x1 TO y2,x2
@ y1+2,x1 SAY "├"
@ y1+2,x1+1 TO y1+2,x2-1
@ y1+2,x2 SAY "┤"
@ y2-2,x1 SAY "├"
@ y2-2,x1+1 TO y2-2,x2-1
@ y2-2,x2 SAY "┤"
IF q = "A"
SET COLOR TO (h)
@ y2-1,x1+2 SAY "<N>"
@ y2-1,36 SAY "<Q>"
SET COLOR TO (n)
@ y2-1,x1+6 SAY "Next"
@ y2-1,40 SAY "Quit"
ELSE
SET COLOR TO (h)
@ y2-1,36 SAY "<Q>"
SET COLOR TO (n)
@ y2-1,40 SAY "Quit"
ENDIF
x = 1
DO WHILE x <= y
@ y1+3+x,x1+2 SAY tit[x]
@ y1+3+x,Col() SAY ":"
x = x + 1
ENDDO
OTHERWISE
DO err WITH 3,x
ENDCASE
SELECT e
IF q = "A"
SET FILTER TO vis
COUNT TO w && w= Number of users
GOTO TOP
IF w = 0
DO Err WITH 4,1
ENDIF
ENDIF
SET COLOR TO (h)
@ y1+1,x1+10 SAY usr
SELECT a
x = 1
DO WHILE x <= y
SEEK pf[x]
IF flen < 3
IF flen = 1
f = 254 - Asc(SubStr(e->flg,fpos,1))
ELSE
d = SubStr(e->flg,fpos,1) && d=
d = ((254 - Asc(d))-1) * 126
f = SubStr(e->flg,fpos+1,1)
f = 254-Asc(f)
f = d + f && =d
ENDIF
d = (f * pwidth) - pwidth && d=
tit[x] = Homepath() + "PIKS\" + RTrim(pf[x]) + ".PIK" && d= file name
FOPEN s (tit[x]) 10 v
FSEEK s z d 0 && =d
FLREAD s z line
FCLOSE s
ELSE
line = LTrim(Str(254-Asc(SubStr(e->flg,fpos,1))))
d = LTrim(Str(254-Asc(SubStr(e->flg,fpos+1,1)))) && d=
f = LTrim(Str(254-Asc(SubStr(e->flg,fpos+2,1))))
line = line + "/" + d + "/" + f && =d
ENDIF
@ y1+3+x,x1+g+4 SAY line && Max length of title =g
x = x + 1
ENDDO
IF q = "A"
SET COLOR TO (b)
j = 3
i = 1
k = " "
@ y1+1,x1+1 GET k
DO WHILE .T.
READ
DO CASE
CASE LastKey() = 78 .OR. LastKey() = 110 && next
IF i = w
LOOP
ENDIF
IF j = 3 && No previous
SET COLOR TO (h)
@ y2-1,x2-13 SAY "<P>"
SET COLOR TO (n)
@ y2-1,x2-9 SAY "Previous"
j = 2
ENDIF
SELECT e
SKIP
SET COLOR TO (h)
@ y1+1,x1+10 SAY usr
SELECT a
x = 1
DO WHILE x <= y
SEEK pf[x]
IF flen < 3
IF flen = 1
f = 254 - Asc(SubStr(e->flg,fpos,1))
ELSE
d = SubStr(e->flg,fpos,1) && d=
d = ((254 - Asc(d))-1) * 126
f = SubStr(e->flg,fpos+1,1)
f = 254 - Asc(f)
f = d + f && =d
ENDIF
d = (f * pwidth) - pwidth && d=
FOPEN s (tit[x]) 10 v
FSEEK s z d 0 && =d
FLREAD s z line
FCLOSE s
ELSE
line = LTrim(Str(254-Asc(SubStr(e->flg,fpos,1))))
d = LTrim(Str(254-Asc(SubStr(e->flg,fpos+1,1)))) && d=
f = LTrim(Str(254-Asc(SubStr(e->flg,fpos+2,1))))
line = line + "/" + d + "/" + f && =d
ENDIF
@ y1+3+x,x1+g+4 SAY line && Max length of title =g
x = x + 1
ENDDO
i = i + 1
IF j # 1 .AND. i = w
SET COLOR TO (b)
@ y2-1,x1+2 SAY " "
j = 1
ENDIF
CASE LastKey() = 80 .OR. LastKey() = 112 && previous
IF i = 1
LOOP
ENDIF
IF j = 1
SET COLOR TO (h)
@ y2-1,x1+2 SAY "<N>"
SET COLOR TO (n)
@ y2-1,x1+6 SAY "Next"
j = 2 && Previous and Next
ENDIF
SELECT e
SKIP -1
SET COLOR TO (h)
@ y1+1,x1+10 SAY usr
SELECT a
x = 1
DO WHILE x <= y
SEEK pf[x]
IF flen < 3
IF flen = 1
f = 254 - Asc(SubStr(e->flg,fpos,1))
ELSE
d = SubStr(e->flg,fpos,1) && d=
d = ((254 - Asc(d))-1) * 126
f = SubStr(e->flg,fpos+1,1)
f = 254 - Asc(f)
f = d + f && =d
ENDIF
d = (f * pwidth) - pwidth && d=
FOPEN s (tit[x]) 10 v
FSEEK s z d 0 && =d
FLREAD s z line
FCLOSE s
ELSE
line = LTrim(Str(254-Asc(SubStr(e->flg,fpos,1))))
d = LTrim(Str(254-Asc(SubStr(e->flg,fpos+1,1)))) && d=
f = LTrim(Str(254-Asc(SubStr(e->flg,fpos+2,1))))
line = line + "/" + d + "/" + f && =d
ENDIF
@ y1+3+x,x1+g+4 SAY line && Max length of title =g
x = x + 1
ENDDO
i = i - 1
IF j # 3 .AND. i = 1
SET COLOR TO (b)
@ y2-1,x2-13 SAY " "
j = 3
ENDIF
CASE LastKey() = 81 .OR. LastKey() = 113 && quit
EXIT
ENDCASE
ENDDO
ELSE
SET COLOR TO (b)
k = " "
@ y1+1,x1+1 GET k
DO WHILE .T.
READ
IF LastKey() = 81 .OR. LastKey() = 113 && quit
EXIT
ENDIF
ENDDO
ENDIF
RELEASE tit
RELEASE pf
RETURN
**************************************************
PROCEDURE err
PARAMETERS q,d
DO CASE
CASE q = 1
s = "No ENDIF: after IF:"
CASE q = 2
s = "File " + d + " not found."
CASE q = 3
s = LTrim(Str(d)) + " items in view. Maximum number of 12 items/view."
CASE q = 4
s = "No users on system visible."
CASE q = 5
s = "View item # " + LTrim(Str(d)) + " could not be found."
CASE q = 6
s = "Length of title and field in view, line "+ LTrim(Str(d)) + " cannot exceed 70."
ENDCASE
SET COLOR TO W+/N
@ 5,5 SAY s
@ 6,5 SAY "Program terminating. Please notify Sysop."
@ 7,15 SAY "<ANY KEY>"
k = InKey (0)
QUIT
RETURN
**************************************************
PROCEDURE er
SET COLOR TO N/N
@ 0,0 CLEAR
line = Message()
SET COLOR TO W+/N
@ 5,5 SAY line
@ 6,5 SAY "Program terminating. Please notify Sysop."
@ 7,15 SAY "<ANY KEY>"
k = InKey(0)
QUIT
RETURN
**************************************************
PROCEDURE Gfld
PARAMETERS s,o
o = .F.
q = SubStr(line,1,3)
DO CASE
CASE Upper(q) = "YSN"
IF s=1
IF YSN
o = .T.
ENDIF
ELSE
IF .NOT. YSN
o = .T.
ENDIF
ENDIF
CASE Upper(q) = "REG"
IF s=1
IF REG
o = .T.
ENDIF
ELSE
IF .NOT. REG
o = .T.
ENDIF
ENDIF
CASE Upper(q) = "AGE"
IF s=1
IF AGE
o = .T.
ENDIF
ELSE
IF .NOT. AGE
o = .T.
ENDIF
ENDIF
CASE Upper(q) = "VIS"
IF s=1
IF VIS
o = .T.
ENDIF
ELSE
IF .NOT. VIS
o = .T.
ENDIF
ENDIF
ENDCASE
RETURN
**************************************************
PROCEDURE Cfld
PARAMETERS s
q = SubStr(line,1,3)
DO CASE
CASE Upper(q) = "YSN"
IF s=1
REPLACE ysn WITH .T.
ELSE
REPLACE ysn WITH .F.
ENDIF
CASE Upper(q) = "REG"
IF s=1
REPLACE reg WITH .T.
ELSE
REPLACE reg WITH .F.
ENDIF
CASE Upper(q) = "AGE"
IF s=1
REPLACE age WITH .T.
ELSE
REPLACE age WITH .F.
ENDIF
CASE Upper(q) = "VIS"
IF s=1
REPLACE vis WITH .T.
ELSE
REPLACE vis WITH .F.
ENDIF
ENDCASE
RETURN
**************************************************
PROCEDURE Chk
d = Val(SubStr(line,m+1)) && d= Box style
DO CASE
CASE d = 1
i = "( )"
q = "(∙)"
CASE d = 2
i = "[ ]"
q = "[X]"
CASE d = 3
i = "< >"
q = "<■>"
ENDCASE
DO Gyx WITH y,x
y1 = y
x1 = x
DO Gc WITH b,n,h,bd
g = 0 && g= bytes to move back
x = 0
DO WHILE .T.
FLREAD t z line
line = RTrim(CRTrim(line))
g = g - z
IF Len(line) < 3 .OR. .NOT. "=" $ line
EXIT
ENDIF
x = x + 1
ENDDO
y = x +1 && y= number of items to view
FSEEK t z g 1 && bytes to move back =g
DECLARE pf[y]
DECLARE tit[y]
f= flg
g = 4 && g= Max length of title
x = 1
DO WHILE x <= y-1
FLREAD t z line
line = RTrim(CRTrim(line))
w = At("=",line) && w= position of "="
pf[x] = Val(SubStr(line,1,w-1)) && flag position
f = Stuff(f,pf[x],1,"n")
tit[x] = SubStr(line,w+1) && position of "=" =w
IF Len(tit[x]) > g
g = Len(tit[x])
ENDIF
x = x + 1
ENDDO
pf[y] = 0
tit[y] = "Quit"
y2 = y1 + y + 3
x2 = x1 + g + 6
SET COLOR TO (b)
DO CASE
CASE bd = 0
@ y1+1,x1+1 CLEAR TO y2-1,x2-1
SET COLOR TO (n)
CASE bd = 1
@ y1,x1 CLEAR TO y2,x2
SET COLOR TO (n)
@ y1,x1 TO y2,x2
CASE bd = 2
@ y1,x1 CLEAR TO y2,x2
SET COLOR TO (n)
@ y1,x1 TO y2,x2 DOUBLE
ENDCASE
x = 1
DO WHILE x <= y-1
IF SubStr(f,pf[x],1) = "n"
@ y1+1+x,x1+2 SAY i
ELSE
@ y1+1+x,x1+2 SAY q
ENDIF
@ y1+1+x,x1+6 SAY tit[x]
x = x + 1
ENDDO
@ y1+1+y,x1+2 SAY i
@ y1+1+y,x1+6 SAY "Quit"
x = 1
SET COLOR TO (h)
@ y1+1+x,x1+6 SAY tit[x]
SET COLOR TO N/N
k = " "
@ 0,0 GET k
DO WHILE .T.
READ
DO CASE
CASE LastKey() = 5
IF x = 1
LOOP
ELSE
SET COLOR TO (n)
@ y1+1+x,x1+6 SAY tit[x]
x = x - 1
SET COLOR TO (h)
@ y1+1+x,x1+6 SAY tit[x]
ENDIF
CASE LastKey() = 24
IF x = y
LOOP
ELSE
SET COLOR TO (n)
@ y1+1+x,x1+6 SAY tit[x]
x = x + 1
SET COLOR TO (h)
@ y1+1+x,x1+6 SAY tit[x]
ENDIF
CASE LastKey() = 32
SET COLOR TO (n)
IF x = y
@ y1+1+x,x1+2 SAY q
RELEASE tit
RELEASE pf
k = InKey(1)
RETURN
ENDIF
SELECT e
IF SubStr(f,pf[x],1) = "n"
f = Stuff(f,pf[x],1,"y")
REPLACE flg WITH f
@ y1+1+x,x1+2 SAY q
ELSE
f = Stuff(f,pf[x],1,"n")
REPLACE flg WITH f
@ y1+1+x,x1+2 SAY i
ENDIF
ENDCASE
ENDDO
RETURN